home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Freeware / Griffith 0.9.8 / griffith-0.9.8-win32.exe / {app} / lib / gettext / user-email < prev   
Text File  |  2008-04-17  |  14KB  |  437 lines

  1. #!/bin/sh
  2. # Prints the user's email address, with confirmation from the user.
  3. #
  4. # Copyright (C) 2001-2003, 2005 Free Software Foundation, Inc.
  5. #
  6. # This program is free software: you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation; either version 3 of the License, or
  9. # (at your option) any later version.
  10. #
  11. # This program is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. # GNU General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License
  17. # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  
  19. # Prerequisites for using ${exec_prefix}/lib and ${datarootdir}/locale.
  20. prefix="/target"
  21. exec_prefix="${prefix}"
  22. datarootdir="${prefix}/share"
  23. datadir="${datarootdir}"
  24. # Set variables libdir, localedir.
  25. libdir="${exec_prefix}/lib"
  26. localedir="${datarootdir}/locale"
  27.  
  28. # Support for relocatability.
  29. if test "yes" = yes; then
  30.   orig_installdir="$libdir"/gettext # see Makefile.am's install rule
  31.   # Determine curr_installdir without caring for symlinked callers.
  32.   curr_installdir=`echo "$0" | sed -e 's,/[^/]*$,,'`
  33.   curr_installdir=`cd "$curr_installdir" && pwd`
  34.   # Compute the original/current installation prefixes by stripping the
  35.   # trailing directories off the original/current installation directories.
  36.   while true; do
  37.     orig_last=`echo "$orig_installdir" | sed -n -e 's,^.*/\([^/]*\)$,\1,p'`
  38.     curr_last=`echo "$curr_installdir" | sed -n -e 's,^.*/\([^/]*\)$,\1,p'`
  39.     if test -z "$orig_last" || test -z "$curr_last"; then
  40.       break
  41.     fi
  42.     if test "$orig_last" != "$curr_last"; then
  43.       break
  44.     fi
  45.     orig_installdir=`echo "$orig_installdir" | sed -e 's,/[^/]*$,,'`
  46.     curr_installdir=`echo "$curr_installdir" | sed -e 's,/[^/]*$,,'`
  47.   done
  48.   # Now relocate the directory variables that we use.
  49.   libdir=`echo "$libdir/" | sed -e "s%^${orig_installdir}/%${curr_installdir}/%" | sed -e 's,/$,,'`
  50.   localedir=`echo "$localedir/" | sed -e "s%^${orig_installdir}/%${curr_installdir}/%" | sed -e 's,/$,,'`
  51. fi
  52.  
  53. # Internationalization.
  54. . gettext.sh
  55. TEXTDOMAIN=gettext-tools
  56. export TEXTDOMAIN
  57. TEXTDOMAINDIR="$localedir"
  58. export TEXTDOMAINDIR
  59.  
  60. # Redirect fileno 3 to interactive I/O.
  61. exec 3>/dev/tty
  62.  
  63. # Output a prompt.
  64. if test $# != 0; then
  65.   echo "$1" 1>&3
  66. fi
  67.  
  68. # Find the user name on the local machine.
  69. user=`id -u -n 2>/dev/null`
  70. if test -z "$user"; then
  71.   user="$USER"
  72.   if test -z "$user"; then
  73.     user="$LOGNAME"
  74.     if test -z "$user"; then
  75.       user=unknown
  76.     fi
  77.   fi
  78. fi
  79.  
  80. # Find the hostname.
  81. # hostname on some systems (SVR3.2, old Linux) returns a bogus exit status,
  82. # so uname gets run too, so we keep only the first line of output.
  83. #host=`(hostname || uname -n) 2>/dev/null | sed 1q`
  84. host=`"$libdir"/gettext/hostname --short 2>/dev/null | sed 1q`
  85.  
  86. # Find the hostname.
  87. hostfqdn=`"$libdir"/gettext/hostname --fqdn 2>/dev/null | sed 1q`
  88.  
  89. # Find a list of email addresses from various mailer configuration files.
  90. # All mailers use configuration files under $HOME. We handle them in a
  91. # last-modified - first-priority order.
  92. cd $HOME
  93. files=""
  94.  
  95. # ----------------------- BEGIN MAILER SPECIFIC CODE -----------------------
  96.  
  97. # Mozilla Thunderbird addresses
  98. files="$files .thunderbird/*/prefs.js"
  99.  
  100. # Mozilla addresses
  101. files="$files .mozilla/*/prefs.js"
  102.  
  103. # Netscape 4 addresses
  104. files="$files .netscape/liprefs.js .netscape/preferences.js"
  105.  
  106. # Netscape 3 addresses
  107. files="$files .netscape/preferences"
  108.  
  109. # Emacs/XEmacs rmail, Emacs/XEmacs gnus, XEmacs vm addresses
  110. # XEmacs mew addresses
  111. files="$files .emacs .emacs.el"
  112.  
  113. # KDE2 addresses
  114. files="$files .kde2/share/config/emaildefaults"
  115.  
  116. # KDE kmail addresses
  117. files="$files .kde2/share/config/kmailrc"
  118.  
  119. # GNOME evolution 2 addresses
  120. files="$files .gconf/apps/evolution/mail/%gconf.xml"
  121.  
  122. # GNOME evolution 1 addresses
  123. files="$files evolution/config.xmldb"
  124.  
  125. # GNOME balsa addresses
  126. files="$files .gnome/balsa"
  127.  
  128. # StarOffice and OpenOffice addresses
  129. sed_dos2unix='s/\r$//'
  130. sed_soffice51='s,StarOffice 5\.1=\(.*\)$,\1/sofficerc,p'
  131. sed_soffice52='s,StarOffice 5\.2=\(.*\)$,\1/user/sofficerc,p'
  132. sed_ooffice='s,^OpenOffice[^=]*=\(.*\)$,\1/user/config/registry/instance/org/openoffice/UserProfile.xml,p'
  133. files="$files Office51/sofficerc Office52/user/sofficerc "`sed -n -e "$sed_dos2unix" -e "$sed_soffice51" -e "$sed_soffice52" -e "$sed_ooffice" .sversionrc 2>/dev/null | sed -e 's,^file://*,/,'`
  134.  
  135. # mutt addresses
  136. files="$files .muttrc"
  137.  
  138. # pine addresses
  139. files="$files .pinerc"
  140.  
  141. # xfmail addresses
  142. files="$files .xfmail/.xfmailrc"
  143.  
  144. # tkrat addresses
  145. files="$files .ratatosk/ratatoskrc"
  146.  
  147. # ----------------------- END MAILER SPECIFIC CODE -----------------------
  148.  
  149. # Expand wildcards and remove nonexistent files from the list.
  150. nfiles=""
  151. for file in $files; do
  152.   if test -r "$file" && test ! -d "$file"; then
  153.     nfiles="$nfiles $file"
  154.   fi
  155. done
  156. files="$nfiles"
  157.  
  158. addresses=""
  159.  
  160. if test -n "$files"; then
  161.  
  162.   for file in `ls -t $files`; do
  163.  
  164.     case "$file" in
  165.  
  166. # ----------------------- BEGIN MAILER SPECIFIC CODE -----------------------
  167.  
  168.       # Mozilla and Mozilla Thunderbird addresses
  169.       .mozilla/*/prefs.js | .thunderbird/*/prefs.js)
  170.         addresses="$addresses "`grep -h '^user_pref("mail\.identity\..*\.useremail", ".*");$' $file 2>/dev/null | sed -e 's/^user_pref("mail\.identity\..*\.useremail", "\(.*\)");$/\1/'`
  171.         ;;
  172.  
  173.       # Netscape 4 addresses
  174.       .netscape/liprefs.js | .netscape/preferences.js)
  175.         addresses="$addresses "`grep -h '^user_pref("mail\.identity\.useremail", ".*");$' $file 2>/dev/null | sed -e 's/^user_pref("mail\.identity\.useremail", "\(.*\)");$/\1/'`
  176.         ;;
  177.  
  178.       # Netscape 3 addresses
  179.       .netscape/preferences)
  180.         addresses="$addresses "`grep -h '^EMAIL_ADDRESS:' $file 2>/dev/null | sed -e 's/^EMAIL_ADDRESS:[     ]*//'`
  181.         ;;
  182.  
  183.       .emacs | .emacs.el)
  184.         # Emacs/XEmacs rmail, Emacs/XEmacs gnus, XEmacs vm addresses
  185.         addresses="$addresses "`grep -h '[ (]user-mail-address "[^"]*"' $file 2>/dev/null | sed -e 's/^.*[ (]user-mail-address "\([^"]*\)".*$/\1/'`
  186.         # XEmacs mew addresses
  187.         domains=`grep -h '[ (]mew-mail-domain "[^"]*"' $file 2>/dev/null | sed -e 's/^.*[ (]mew-mail-domain "\([^"]*\)".*$/\1/'`
  188.         if test -n "$domains"; then
  189.           for domain in $domains; do
  190.             addresses="$addresses ${user}@$domain"
  191.           done
  192.         fi
  193.         ;;
  194.  
  195.       # KDE2 addresses
  196.       .kde2/share/config/emaildefaults)
  197.         addresses="$addresses "`grep -h '^EmailAddress=' $file 2>/dev/null | sed -e 's/^EmailAddress=//'`
  198.         ;;
  199.  
  200.       # KDE kmail addresses
  201.       .kde2/share/config/kmailrc)
  202.         addresses="$addresses "`grep -h '^Email Address=' $file 2>/dev/null | sed -e 's/^Email Address=//'`
  203.         ;;
  204.  
  205.       # GNOME evolution 2 addresses
  206.       .gconf/apps/evolution/mail/%gconf.xml)
  207.         sedexpr0='s,^.*<addr-spec>\(.*\)</addr-spec>.*$,\1,p'
  208.         addresses="$addresses "`sed -n -e "$sedexpr0" < $file`
  209.         ;;
  210.  
  211.       # GNOME evolution 1 addresses
  212.       evolution/config.xmldb)
  213.         sedexpr0='s/^.*<entry name="identity_address_[0-9]*" type="string" value="\([^"]*\)".*$/\1/p'
  214.         sedexpr1='s/\(..\)/\\x\1/g'
  215.         sedexpr2='s,$,\\n,'
  216.         addresses="$addresses "`sed -n -e "$sedexpr0" < $file | while read hexstring; do printf \`echo "$hexstring" | sed -e "$sedexpr1" -e "$sedexpr2"\`; done`
  217.         ;;
  218.  
  219.       # GNOME balsa addresses
  220.       .gnome/balsa)
  221.         addresses="$addresses "`grep -h '^Address=' $file 2>/dev/null | sed -e 's/^Address=//'`
  222.         ;;
  223.  
  224.       # OpenOffice addresses
  225.       */UserProfile.xml)
  226.         addresses="$addresses "`sed -n -e 's,^.*<mail cfg:type="string">\(.*\)</mail>.*$,\1,p' $file 2>/dev/null`
  227.         ;;
  228.  
  229.       # StarOffice addresses
  230.       # Not a typo. They really write "Adress" with a single d.
  231.       # German orthography...
  232.       */sofficerc)
  233.         addresses="$addresses "`grep -h '^User-Adress=' $file 2>/dev/null | sed -e 's/#[^#]*$//' -e 's/^.*#//'`
  234.         ;;
  235.  
  236.       # mutt addresses
  237.       .muttrc)
  238.         mutt_addresses=`grep -h '^set from="[^"]*"[     ]*$' $file 2>/dev/null | sed -e 's/^set from="\([^"]*\)"[     ]*$/\1/'`
  239.         if test -n "$mutt_addresses"; then
  240.           addresses="$addresses $mutt_addresses"
  241.         else
  242.           # mutt uses $EMAIL as fallback.
  243.           if test -n "$EMAIL"; then
  244.             addresses="$addresses $EMAIL"
  245.           fi
  246.         fi
  247.         ;;
  248.  
  249.       # pine addresses
  250.       .pinerc)
  251.         domains=`grep -h '^user-domain=' $file 2>/dev/null | sed -e 's/^user-domain=//'`
  252.         if test -n "$domains"; then
  253.           for domain in $domains; do
  254.             addresses="$addresses ${user}@$domain"
  255.           done
  256.         else
  257.           # The use-only-domain-name option is only used if the user-domain option is not present.
  258.           domains=`grep -h '^use-only-domain-name=' $file 2>/dev/null | sed -e 's/^use-only-domain-name=//'`
  259.           if test "Yes" = "$domains"; then
  260.             addresses="$addresses ${user}@"`echo "$hostfqdn" | sed -e 's/^[^.]*\.//'`
  261.           fi
  262.         fi
  263.         ;;
  264.  
  265.       # xfmail addresses
  266.       .xfmail/.xfmailrc)
  267.         addresses="$addresses "`grep -h '^from=.*<.*>' $file 2>/dev/null | sed -e 's/^.*<\([^<>]*\)>.*$/\1/'`
  268.         ;;
  269.  
  270.       # tkrat addresses
  271.       .ratatosk/ratatoskrc)
  272.         domains=`grep -h '^set option(masquerade_as) ' $file 2>/dev/null | sed -e 's/^set option(masquerade_as) //'`
  273.         if test -n "$domains"; then
  274.           for domain in $domains; do
  275.             addresses="$addresses ${user}@$domain"
  276.           done
  277.         else
  278.           # The domain option is used only if the masquerade_as option is not present.
  279.           domains=`grep -h '^set option(domain) ' $file 2>/dev/null | sed -e 's/^set option(domain) //'`
  280.           if test -n "$domains"; then
  281.             for domain in $domains; do
  282.               addresses="$addresses ${user}@${host}.$domain"
  283.             done
  284.           fi
  285.         fi
  286.         ;;
  287.  
  288. # ----------------------- END MAILER SPECIFIC CODE -----------------------
  289.  
  290.     esac
  291.  
  292.   done
  293.  
  294. fi
  295.  
  296. # Some Debian systems have a file /etc/mailname.
  297. if test -r /etc/mailname; then
  298.   hostmailname=`cat /etc/mailname`
  299.   if test -n "$hostmailname"; then
  300.     addresses="$addresses ${user}@$hostmailname"
  301.   fi
  302. fi
  303.  
  304. # SuSE Linux >= 8.0 systems have a file /etc/sysconfig/mail.
  305. if test -r /etc/sysconfig/mail; then
  306.   hostmailname=`. /etc/sysconfig/mail && echo "$FROM_HEADER"`
  307.   if test -n "$hostmailname"; then
  308.     addresses="$addresses ${user}@$hostmailname"
  309.   fi
  310. fi
  311.  
  312. # elm has no user-defined addresses.
  313. # mailx has no user-defined addresses.
  314. # mh has no user-defined addresses.
  315. # They use the system default.
  316. addresses="$addresses ${user}@$hostfqdn"
  317.  
  318. # Normalize addresses: remove addresses without @, lowercase the part after @,
  319. # and remove duplicates.
  320. lowercase_sed='{
  321. h
  322. s/^[^@]*@\(.*\)$/\1/
  323. y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
  324. x
  325. s/^\([^@]*\)@.*/\1@/
  326. G
  327. s/\
  328. //
  329. p
  330. }'
  331. naddresses=""
  332. for addr in $addresses; do
  333.   case "$addr" in
  334.     "<"*">") addr=`echo "$addr" | sed -e 's/^<//' -e 's/>$//'` ;;
  335.   esac
  336.   case "$addr" in
  337.     *@*)
  338.       addr=`echo "$addr" | sed -n -e "$lowercase_sed"`
  339.       case " $naddresses " in
  340.         *" $addr "*) ;;
  341.         *) naddresses="$naddresses $addr" ;;
  342.       esac
  343.       ;;
  344.   esac
  345. done
  346. addresses="$naddresses"
  347.  
  348. # Now it's time to ask the user.
  349. case "$addresses" in
  350.   " "*" "*)
  351.     # At least two addresses.
  352.     lines=""
  353.     i=0
  354.     for addr in $addresses; do
  355.       i=`expr $i + 1`
  356.       lines="${lines}${i} ${addr}
  357. "
  358.     done
  359.     while true; do
  360.       { gettext "Which is your email address?"; echo; } 1>&3
  361.       echo "$lines" 1>&3
  362.       { gettext "Please choose the number, or enter your email address."; echo; } 1>&3
  363.       read answer < /dev/tty
  364.       case "$answer" in
  365.         *@*) ;;
  366.         [0-9]*)
  367.           i=0
  368.           for addr in $addresses; do
  369.             i=`expr $i + 1`
  370.             if test "$i" = "$answer"; then
  371.               break 2
  372.             fi
  373.           done
  374.           ;;
  375.       esac
  376.       case "$answer" in
  377.         "<"*">") answer=`echo "$answer" | sed -e 's/^<//' -e 's/>$//'` ;;
  378.       esac
  379.       case "$answer" in
  380.         *" "*) { gettext "Invalid email address: invalid character."; echo; echo; } 1>&3 ; continue ;;
  381.         *@*.*) ;;
  382.         *@*) { gettext "Invalid email address: need a fully qualified host name or domain name."; echo; echo; } 1>&3 ; continue ;;
  383.         *) { gettext "Invalid email address: missing @"; echo; echo; } 1>&3 ; continue ;;
  384.       esac
  385.       addr=`echo "$answer" | sed -n -e "$lowercase_sed"`
  386.       break
  387.     done
  388.     ;;
  389.   " "*)
  390.     # One address.
  391.     while true; do
  392.       { gettext "Is the following your email address?"; echo; } 1>&3
  393.       echo " $addresses" 1>&3
  394.       { gettext "Please confirm by pressing Return, or enter your email address."; echo; } 1>&3
  395.       read answer < /dev/tty
  396.       if test -z "$answer"; then
  397.         addr=`echo "$addresses" | sed -e 's/^ //'`
  398.         break
  399.       fi
  400.       case "$answer" in
  401.         "<"*">") answer=`echo "$answer" | sed -e 's/^<//' -e 's/>$//'` ;;
  402.       esac
  403.       case "$answer" in
  404.         *" "*) { gettext "Invalid email address: invalid character."; echo; echo; } 1>&3 ; continue ;;
  405.         *@*.*) ;;
  406.         *@*) { gettext "Invalid email address: need a fully qualified host name or domain name."; echo; echo; } 1>&3 ; continue ;;
  407.         *) { gettext "Invalid email address: missing @"; echo; echo; } 1>&3 ; continue ;;
  408.       esac
  409.       addr=`echo "$answer" | sed -n -e "$lowercase_sed"`
  410.       break
  411.     done
  412.     ;;
  413.   "")
  414.     # No address.
  415.     { gettext "Couldn't find out about your email address."; echo; } 1>&3
  416.     while true; do
  417.       { gettext "Please enter your email address."; echo; } 1>&3
  418.       read answer < /dev/tty
  419.       case "$answer" in
  420.         "<"*">") answer=`echo "$answer" | sed -e 's/^<//' -e 's/>$//'` ;;
  421.       esac
  422.       case "$answer" in
  423.         *" "*) { gettext "Invalid email address: invalid character."; echo; echo; } 1>&3 ; continue ;;
  424.         *@*.*) ;;
  425.         *@*) { gettext "Invalid email address: need a fully qualified host name or domain name."; echo; echo; } 1>&3 ; continue ;;
  426.         *) { gettext "Invalid email address: missing @"; echo; echo; } 1>&3 ; continue ;;
  427.       esac
  428.       addr=`echo "$answer" | sed -n -e "$lowercase_sed"`
  429.       break
  430.     done
  431.     ;;
  432.   *) echo "internal error" 1>&3 ; exit 1 ;;
  433. esac
  434.  
  435. # Print to standard output.
  436. echo "$addr"
  437.